package org.ws.task.zookeeper;

import org.ws.task.Bootable;
import org.ws.task.model.NodeMetadata;
import org.ws.task.model.NodeStatus;

import java.util.Collection;

/**
 * 节点同步管理
 */
public interface ZkNodeManager extends Bootable,ZkDataManager {

    /**
     * 当前节点ID
     */
    String id();

    /**
     * 获取Leader
     * @return
     */
    NodeMetadata getLeader();

    /**
     * 当前节点是否为Leader
     * @return
     */
    boolean isLeader();

    /**
     * 当前节点为Leader时更新
     * @param port
     * @param status
     */
    void updateLeader(int port, NodeStatus status);

    /**
     * 更新本Worker节点
     * @param port
     * @param status
     */
    void updateWorker(int port, NodeStatus status);

    /**
     * 获取Worker元数据
     * @return
     */
    Collection<NodeMetadata> getWorkers();
}
